import axios from 'axios'
import { ElMessage } from 'element-plus'
import {localGet, localRemove} from './index'
import config from '~/config'
import qs from 'qs'
// 对所有axios实例规定前置url
axios.defaults.baseURL = config[import.meta.env.MODE].baseUrl
// 创建axios实例
const service =  axios.create({
    // 超时
    timeout: 30 * 1000
})

// 携带 cookie，对目前的项目没有什么作用，因为我们是 token 鉴权
service.defaults.withCredentials = true
// 请求头，headers 信息
service.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'
service.defaults.headers['token'] = localGet('token') || ''
service.defaults.headers['Accept'] = '*/*'
// 默认 post 请求，使用 application/x-www-form-urlencoded 形式
service.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'

// 请求拦截器，内部根据返回值，重新组装，统一管理。

// request拦截器
service.interceptors.request.use(
    (config) => {
        // console.log('axios请求拦截器', config)
      if (config.method === 'post' && config.data) {
        config.data = qs.stringify(config.data)
      }
      return config
    },
    (error) => {
      return Promise.reject(error)
    }
)

// 响应拦截器
service.interceptors.response.use(res => {
    // console.log('axios拦截器',res,typeof res.data)
  if (res.status === 200) {
      if (!res.data) {
          console.log('响应数据是空')
          return Promise.resolve('')
      }
      if (typeof res.data !== 'object') {
          if (res.data.startsWith('<')) {
              // 登录成功
              if (res.data.indexOf('index.html') !== -1) {
                  return Promise.resolve(res.data)
              }
              // 返回login登录失效
              if (res.data.indexOf('login.html') !== -1) {
                  localRemove('token')
                  // window.location.href = '/'
                  // ElMessage.error('登录失效')
                  return Promise.resolve('登录失效')
              }
              // 响应的是xml
              if (res.data.indexOf('<?xml') !== -1) {
                  console.log('响应的是xml')
                  return Promise.resolve(res.data)
              }
          }
          return Promise.resolve(eval('('+res.data+')'))
      }
    return Promise.resolve(res.data)
  }
  else if (res.status === 403) {
      ElMessage.error('403 Forbidden')
      return Promise.reject('403 Forbidden')
  }
  // return Promise.reject(res.data)
})

export default service